package com.jfs.security.authentication;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @Description 会话管理
 * @E-mail cwm3412638@163.com
 * @Author cwm
 * @Date 2022/8/10
 */
public class SessionManager {
    /**
     * 当前登录用户token会话信息
     */
    private final static Map<String, String> SESSION_MAP = new ConcurrentHashMap<>();
    /**
     * 当前登录用户是否在别处登录管理
     */
    private final static Map<String, Boolean> IS_LOGIN = new ConcurrentHashMap<>();

    /**
     * 根据用户名获取当前用户会话信息
     *
     * @param name
     * @return
     */
    public static String getSession(String name) {
        if (SESSION_MAP.containsKey(name)) {
            return SESSION_MAP.get(name);
        }
        return null;
    }

    /**
     * 设置会话信息
     *
     * @param name
     * @param token
     */
    public static void setSession(String name, String token) {
        SESSION_MAP.put(name, token);
        IS_LOGIN.put(token, true);
    }

    /**
     * 清除会话信息
     *
     * @param token
     */
    public static void cleanSession(String token) {
        if (SESSION_MAP.containsKey(token)) {
            SESSION_MAP.remove(token);
        }
    }

    /**
     * 设置已经登录token为失效状态
     *
     * @param token
     */
    public static void setIsLoginExpir(String token) {
        IS_LOGIN.put(token, false);
    }

    /**
     * 判断当前token是否已经登录过
     *
     * @param token
     * @return
     */
    public static Boolean getIsLogin(String token) {
        if (IS_LOGIN.containsKey(token)) {
            return IS_LOGIN.get(token);
        }
        return null;
    }

    /**
     * 清除已经登录状态
     *
     * @param token
     */
    public static void cleanIsLogin(String token) {
        if (IS_LOGIN.containsKey(token)) {
            IS_LOGIN.remove(token);
        }
    }
}
